# _*_ coding: utf-8 _*_
# .@FileName:PackUtils
# .@Data....:2025-02-08 : 23 : 09
# .@Aurhor..:LiuJingYu
"""
launch:
from __future__ import unicode_literals, print_function
import maya.cmds as mc
"""
from __future__ import unicode_literals, print_function
import functools
import logging
import maya.cmds as mc

def undo_block(fn):
    @functools.wraps(fn)
    def _(*args, **kwargs):
        mc.undoInfo(ock=True)
        try:
            return fn(*args, **kwargs)
        finally:
            mc.undo(cck=True)
    return _



# # 配置日志记录
# logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
#
# def undo_block(fn):
#     """
#     这是一个装饰器函数，用于将被装饰的函数包裹在 Maya 的撤销块中。
#     在函数执行前打开一个撤销块，在函数执行完毕后关闭该撤销块。
#     这样可以确保函数内的所有操作可以作为一个整体进行撤销。
#
#     参数:
#     fn (function): 被装饰的函数
#
#     返回:
#     function: 经过包装后的函数，该函数在执行前后会自动管理撤销块
#     """
#     @functools.wraps(fn)
#     def wrapper(*args, **kwargs):
#         try:
#             # 打开撤销块
#             logging.info(f"Opening undo chunk for function {fn.__name__}")
#             mc.undoInfo(ock=True)
#             # 执行被装饰的函数
#             result = fn(*args, **kwargs)
#             return result
#         except Exception as e:
#             # 记录错误信息
#             logging.error(f"An error occurred in function {fn.__name__}: {e}")
#             # 可以根据需要在这里添加额外的错误处理逻辑，例如回滚操作等
#             raise
#         finally:
#             try:
#                 # 关闭撤销块
#                 logging.info(f"Closing undo chunk for function {fn.__name__}")
#                 mc.undo(cck=True)
#             except Exception as e:
#                 # 记录关闭撤销块时的错误信息
#                 logging.error(f"Error closing undo chunk for function {fn.__name__}: {e}")
#     return wrapper